package edu.whu;

import java.io.*;
import java.util.*;
import java.lang.reflect.*;

/**
 * 通过反射创建对象，调用有自定义注解的方法
 */
public class Test {
    public static void main(String[] args) throws Exception{
        //创建集合对象
        Properties pro = new Properties();
        //创建IO流，读取配置文件
        FileInputStream fis = new FileInputStream("./src/main/resources/myapp.properties");
        //集合方法load，读取到的键值对，存储到集合
        pro.load(fis);
        fis.close();

        String className = pro.getProperty("bootstrapClass");
        String methodName = pro.getProperty("methodName");

        //获取指定类的class文件对象
        Class clazz = Class.forName(className);
        Object obj = clazz.newInstance();
        //获取当前类所有的方法
        Method[] declaredMethods = clazz.getDeclaredMethods();
        //获取并执行当前类有注解的方法
        for(Method method : declaredMethods){
            if(method.isAnnotationPresent(InitMethod.class)){
                method.invoke(obj);
            }
        }
        /*
        //通过字节码文件对象Class类，获取指定方法
        Method method = clazz.getMethod(methodName);
        //运行方法
        method.invoke(obj);
        */
    }
}
